
// 定义请求域名基础地址
export const  baseURL:string = "https://meituan.thexxdd.cn/api"

/**
 * 1.封装一个用于请求数据的promise版本的方法
 * XHR   ajax  fetch(ES6新增网络方法 默认支持promise)  axios  request
 * ?:表示可选参数
 */
// 请求数据类型
interface optionsType{
    url: string;
    method?: "GET" | "POST" | "PUT" | "DELETE" ;//请求：restfull风格
    data?: {};
}


// 响应数据类型
interface responseType { 
    data: any,
    msg:string
}


// 定义获取token方法
import { Base64 } from "js-base64";
function getToken(): string {
    const token = uni.getStorageSync("memberInfo").user_Token || "";
    const base64_token = Base64.encode(token + ":");
    return "Basic " + base64_token;
}

export default (options:optionsType):Promise<responseType> => { 
    let url = baseURL+options.url
    return new Promise((resolve, reject) => {

        uni.request({
            url,
            method:options.method || "GET",
            data: options.data || {},
            header: {Authorization:getToken()},
            success: res => { 
                // console.log(res)
                // 解构获取返回数据和响应状态码
                let { data, statusCode } = res
                switch (true) { 
                    case statusCode == 202://错误
                        reject(data)
                        break;
                    case statusCode == 400://参数错误
                        reject(data)
                        break;
                    case statusCode == 401://没有登录
                        uni.showToast({
                            title: "请先登录！",
                            icon:"error"
                        })
                        setTimeout(() => { 
                            uni.navigateTo({url:"../login/login"})
                        },500)
                        reject(data)
                        break;
                    case statusCode == 500://服务器错误
                        reject(data)
                        break;
                    default:
                        resolve(<responseType>data)
                }
            },
            fail: err => { 
                console.log(err)
                reject(err)
            }
        })
    })
}
